<?php

/**
 * This is the model class for table "venta".
 *
 * The followings are the available columns in table 'venta':
 * @property integer $idventa
 * @property string $fecha
 * @property integer $cliente
 * @property integer $vendedor
 * @property integer $forma_cobro
 * @property string $destinatario
 * @property string $dir_facturacion
 * @property integer $distribucion
 * @property integer $tipo_comprobante
 * @property integer $prefijo_comprobante
 * @property integer $numero_comprobante
 * @property string $neto
 * @property string $iva
 * @property string $percepcion
 * @property string $exento
 * @property string $descuento
 * @property integer $saldado
 * @property integer $Sucursal
 * @property integer $anulado
 * @property string $fecha_anulado
 *
 * The followings are the available model relations:
 * @property DetalleVenta[] $detalleVentas
 * @property Cliente $cliente0
 * @property Empleado $vendedor0
 * @property Formadepago $formaCobro
 * @property Circuito $distribucion0
 * @property Comprobante $tipoComprobante
 * @property Sucursal $sucursal
 */
class Venta extends CActiveRecord
{
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'venta';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('tipo_comprobante, prefijo_comprobante, numero_comprobante, neto, iva, percepcion, exento,cliente, vendedor,Sucursal, forma_cobro, distribucion', 'required'),
			array('cliente, vendedor, forma_cobro, distribucion, tipo_comprobante, prefijo_comprobante, numero_comprobante, saldado, Sucursal, anulado', 'numerical', 'integerOnly'=>true),
			array('destinatario, dir_facturacion', 'length', 'max'=>100),
			array('neto, iva, percepcion, exento, descuento', 'length', 'max'=>10),
			array('fecha_anulado', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('idventa, fecha, cliente, vendedor, forma_cobro, destinatario, dir_facturacion, distribucion, tipoComprobante.descripcion, prefijo_comprobante, numero_comprobante, neto, iva, percepcion, exento, descuento, saldado, Sucursal, anulado, fecha_anulado', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'detalleVentas' => array(self::HAS_MANY, 'DetalleVenta', 'venta'),
			'cliente0' => array(self::BELONGS_TO, 'Cliente', 'cliente'),
			'vendedor0' => array(self::BELONGS_TO, 'Empleado', 'vendedor'),
			'formaCobro' => array(self::BELONGS_TO, 'Formadepago', 'forma_cobro'),
			'distribucion0' => array(self::BELONGS_TO, 'Circuito', 'distribucion'),
			'tipoComprobante' => array(self::BELONGS_TO, 'Comprobante', 'tipo_comprobante'),
			'sucursal' => array(self::BELONGS_TO, 'Sucursal', 'Sucursal'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'idventa' => 'Idventa',
			'fecha' => 'Fecha',
			'cliente' => 'Cliente',
			'vendedor' => 'Vendedor',
			'forma_cobro' => 'Forma Cobro',
			'destinatario' => 'Destinatario',
			'dir_facturacion' => 'Dir Facturacion',
			'distribucion' => 'Distribucion',
			'tipo_comprobante' => 'Tipo',
			'prefijo_comprobante' => 'Prefijo ',
			'numero_comprobante' => 'Numero ',
			'neto' => 'Neto',
			'iva' => 'Iva',
			'percepcion' => 'Percepcion',
			'exento' => 'Exento',
			'descuento' => 'Descuento',
			'saldado' => 'Saldado',
			'Sucursal' => 'Sucursal',
			'anulado' => 'Anulado',
			'fecha_anulado' => 'Fecha Anulado',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function search()
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;
		$criteria->compare('idventa',$this->idventa);
		$criteria->compare('fecha',$this->fecha,true);
		$criteria->compare('cliente',$this->cliente,true);

		$criteria->compare('vendedor',$this->vendedor);
		$criteria->compare('forma_cobro',$this->forma_cobro);
		$criteria->compare('destinatario',$this->destinatario,true);
		$criteria->compare('dir_facturacion',$this->dir_facturacion,true);
		$criteria->compare('distribucion',$this->distribucion);
		$criteria->compare('tipo_comprobante',$this->tipo_comprobante);
		$criteria->compare('prefijo_comprobante',$this->prefijo_comprobante);
		$criteria->compare('numero_comprobante',$this->numero_comprobante);
		$criteria->compare('neto',$this->neto,true);
		$criteria->compare('iva',$this->iva,true);
		$criteria->compare('percepcion',$this->percepcion,true);
		$criteria->compare('exento',$this->exento,true);
		$criteria->compare('descuento',$this->descuento,true);
		$criteria->compare('saldado',$this->saldado);
		$criteria->compare('Sucursal',$this->Sucursal);
		$criteria->compare('anulado',$this->anulado);
		$criteria->compare('fecha_anulado',$this->fecha_anulado,true);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,'sort'=>array(
					'defaultOrder'=>'fecha DESC,tipo_comprobante,numero_comprobante DESC',)
		));
	}

	/**
	 * Returns the static model of the specified AR class.
	 * Please note that you should have this exact method in all your CActiveRecord descendants!
	 * @param string $className active record class name.
	 * @return Venta the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
	public function getDeuda(){
		$command = Yii::app()->db->createCommand();
		$command->select( 'sum(importe) as sum');
		$command->from('movimientocybdet');
		$command->where('tComprobante=:tipo and pComprobante=:prefijo and nComprobante=:numero',array(':tipo'=>$this->tipo_comprobante,':prefijo'=>$this->prefijo_comprobante,':numero'=>$this->numero_comprobante));
		//$criteria->params = array(':tipo'=>$this->tipo_comprobante,':prefijo'=>$this->prefijo_comprobante,':numero'=>$this->numero_comprobante);
		//$movimiento = Movimientocybdet::model()->find($criteria);
		//return $command->queryScalar();
		return round(($this->neto+$this->percepcion+$this->iva+$this->exento)-$command->queryScalar(),2);
	}
}
